Go 转 Rust 很难 ,面试也逃不过手撕算法!
1 人赞同了该文章
大家好,我是渔夫。
今天分享主题,最近有位伙伴面试 Rust 岗位要求手撕算法了,心想 Rust 学习起来够费劲了,应该没有算法环节,没想到还是逃不过。
这位伙伴之前经验,在广州某家做 虚拟化存储 方向,主要是 Go 开发,也写 C/C++ 不过相对较少。这次跳槽就是想上班自由,所以就找个远程公司,刚好找到一个纯 Rust 开发的。
面试开始!
一位体态丰腴,身着格子衫中年男,手持一台布满划痕的 MacBook 向我缓步走来,看着快秃顶的头发,让人不禁暗自猜测,肯定是位资深的顶级架构师。
看了眼简历,咱们直接开门见山,先来个简单点算法题热身吧。
Go版本:两个 goroutine 交替执行打印数字和字母
你之前是写 Go 语言的嘛,先尝试用 Go 实现两个 goroutine 交替执行打印数字和字母。
var ch1 = make(chan bool,1)
var ch2 = make(chan bool)
func f() {
ch1 <- true
for i:=1;i<=10;i+= 2{
<- ch1
fmt.Print(i)
fmt.Print(i+1," ")
ch2 <- true
}
}
func f2() {
for i:='A';i<='J';i+=2{
<- ch2
fmt.Print(string(i))
fmt.Print(string(i+1)," ")
ch1 <- true
}
}
func main() {
go f1()
go f2()
time.Sleep(time.Second)
}
然后,期间问些八股文的题,如下:
八股文
- 你为什么要转 Rust ,它有什么好处?
- 你是如何使用 Cargo 创建新的 Rust 项目?
- 解释一下 Rust 的 所有权模型 ?
- Rust 中什么是 借用 ?
- Rust 中如何使用 堆栈和堆 ?
- 你如何看待,为什么 Rust 不使用 垃圾收集器 ?
- 如何使用 Cargo 构建和测试 Rust 代码?
- 如何将普通 Rust 程序转换为 Cargo 兼容程序?
- Rust 宏是什么?它与函数有何不同?
- 解释 Rust 中的错误处理。
- Rust 中_mut_关键字的用途是什么?
- Rust 中如何声明全局变量?
- Cargo.lock 文件有什么用途?
- Cargo.lock 文件有什么用途?
- 为什么您可能在 Rust 中使用不安全的代码,有哪些风险?
- Rust 如何处理 并发 ?
八股文回答差不多了,面试说,那我们今天面试差不多了,再来一天算法就结束今天面试,前面你使用 Go 的写实现两个 goroutine 交替执行打印数字和字母。那么我们换 Rust 版本,实现完成咱们今天就面试结束。
Rust 版本:交替执行打印数字和字母
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
// 使用 Arc 和 Mutex 来共享状态
let counter = Arc::newnew(1);
let counter_clone = Arc::clone(&counter);
// 创建一个线程打印数字
let handle1 = thread::spawn(move || {
print_numbers(counter_clone);
});
// 创建另一个线程打印字母
let handle2 = thread::spawn(move || {
print_letters(counter);
});
// 等待两个线程完成
handle1.join().unwrap();
handle2.join().unwrap();
}
fn print_numbers(counter: Arc<Mutex<i32>>) {
for _ in 0..5 {
let mut num = counter.lock().unwrap();
println!("{}", *num);
*num += 1;
}
}
fn print_letters(counter: Arc<Mutex<i32>>) {
for _ in 0..5 {
let letter = char::from_u32('A' as u32 + counter.lock().unwrap().rem_euclid(26) as u32)
.unwrap();
println!("{}", letter);
}
}
我是渔夫,现在在国内某某云程序员,业余独立开发者,探索副业,生活、技术、非科班转码经验等相关文章,欢迎关注,和渔夫一起成长。
发布于 2024-02-29 21:30・贵州自学5个月Java找到了9K的工作,我的方式值得大家借鉴
[
我是去年9月22日才正式学习Java的,因为在国营单位工作了4年,在天津一个月工资只有5000块,而且看不到任何晋升的希望...